package io;

import java.io.FileInputStream;
import java.io.IOException;

/**
 * FileInputStream文件输入流，读取文件数据
 */
public class FisDemo {
    public static void main(String[] args) throws IOException {
        /*
        FileInputStream(String fileName)
        FileInputStream(File file)
        上述两种构造器创建文件输入流时，如果参数表达的是一个文件则可以正常实例化
        若表达的文件不存在或表达的是一个目录则会抛出异常
         */
        FileInputStream fis = new FileInputStream("fos.dat");//定义文件输入流
        /*
        InputStream超类上定义了一个读取字节的方法：（所有的字节输入流都具有该方法）
        int read():读取1个字节，并以int的形式返回
        1）返回的int值对应的2进制中只有“低八位”是有效的，高24位全部补0
        2）如果该方法返回的int值为-1（32个1）时，则表示流读取了末尾

        fas.dat的数据： 00000001 00000010 文件末尾
        第一次调用：int d = fir.read();//读取第一个字节
        fas.dat的数据： 00000001 00000010 文件末尾
                      读取的字节
        此时变量d对应的2进制样子： 00000000 00000000 00000000 000000001
                               |--------补充的24个0-------| 读取的字节

         第二次调用：d = fis.read();//读取第二个字节
         fas.dat的数据： 00000001 00000010 文件末尾
                        读取的字节
         此时变量d对应的2进制样子： 00000000 00000000 00000000 000000010
                                |--------补充的24个0-------| 读取的字节

         第三次调用：d = fis.read();//读取了文件末尾
         fas.dat的数据： 00000001 00000010 文件末尾
                                          读取的字节（没有字节了）
         此时变量d对应的2进制样子：11111111 11111111 11111111 11111111
                                |-----------补充的32个1-----------|

         */
        int d = fis.read();//读取第一个字节
        System.out.println(d);//输出10进制数据：1

        d = fis.read();//又读取了一个字节
        System.out.println(d);//输出10进制数据：2

        d = fis.read();
        System.out.println(d);//256超出255的范围，第八位的二进制数字全为0，十进制也为0

        d = fis.read();//读取到文件末尾
        System.out.println(d);//没有字节了，输出-1
        fis.close();
    }
}
